package cn.com.anypay.manager.miaoma.suantaiqrcode;

/**
 * 二维码类型常量定义
 *
 * 与数据库表 t_suantai_qrcode 中的 qr_code_type 字段对应
 */
public final class QrCodeTypeConstants {

    /**
     * 网址链接类型
     *
     * JSON结构示例:
     * v1.0: {"url": "https://www.example.com", "title": "标题"}
     * v2.0: {"default_url": "https://www.example.com", "mobile_url": "https://m.example.com", "wechat_url": "https://mp.example.com"}
     */
    public static final int URL = 1;

    /**
     * 文本内容类型
     *
     * JSON结构示例:
     * {"text": "联系方式：电话123456", "format": "plain"}
     */
    public static final int TEXT = 2;

    /**
     * WiFi信息类型
     *
     * JSON结构示例:
     * {"ssid": "WiFi名称", "password": "密码", "security": "WPA2", "hidden": false}
     */
    public static final int WIFI = 3;

    /**
     * 名片信息类型
     *
     * JSON结构示例:
     * {"name": "张三", "title": "经理", "company": "公司", "phone": "13800138000", "email": "zhang@example.com"}
     */
    public static final int BUSINESS_CARD = 4;

    /**
     * 地理位置类型
     *
     * JSON结构示例:
     * {"latitude": 39.9042, "longitude": 116.4074, "address": "北京市xxx", "name": "地点名称"}
     */
    public static final int LOCATION = 5;

    /**
     * 在线图片类型
     *
     * JSON结构示例:
     * {"url": "https://example.com/image.jpg"}
     */
    public static final int IMAGE = 6;

    /**
     * 小程序类型
     *
     * JSON结构示例:
     * {"miniAppName": "小程序名称", "miniAppCodeImg": "https://example.com/miniapp-code.jpg"}
     */
    public static final int MINI_PROGRAM = 7;

    /**
     * 轮询码类型
     *
     * JSON结构示例:
     * {"items": [{"url": "https://url1.com", "type": 1}, {"url": "https://url2.com", "type": 1}]}
     */
    public static final int POLLING = 8;

    /**
     * 获取类型描述
     *
     * @param type 类型值
     * @return 类型描述
     */
    public static String getTypeDescription(Integer type) {
        if (type == null) return "未知类型";

        return switch (type) {
            case URL -> "网址链接";
            case TEXT -> "文本内容";
            case WIFI -> "WiFi信息";
            case BUSINESS_CARD -> "名片信息";
            case LOCATION -> "地理位置";
            case IMAGE -> "在线图片";
            case MINI_PROGRAM -> "小程序";
            case POLLING -> "轮询码";
            default -> "未知类型(" + type + ")";
        };
    }

    /**
     * 检查类型是否有效
     *
     * @param type 类型值
     * @return 是否有效
     */
    public static boolean isValidType(Integer type) {
        return type != null && type >= 1 && type <= 8;
    }

    private QrCodeTypeConstants() {
        // 工具类，禁止实例化
    }
}